classdef MinimalRedundancyMaximalRelevance ...
        < BinaryClassFilter
    %MINIMALREDUNDANCYMAXIMALRELEVANCE Summary of this class goes here
    %   Detailed explanation goes here
    
    properties ( SetAccess = protected )
        scheme = 'mid' % 'mid' 'miq'
    end
    
    methods
        function [  ] = setScheme( this, scheme )
            if nargin == 1
                this.scheme = 'mid';
            end
            if nargin == 2
                this.scheme = lower(scheme);
            end
        end
    end
    
    methods
        function [ this ] = MinimalRedundancyMaximalRelevance( name, scheme )
            if nargin == 0
                this.setName('mrmr');
            end
            if nargin >= 1
                this.setName(name);
            end
            if nargin >= 2
                this.setScheme(scheme);
            end
        end
    end
    
    methods
        function [  ] = build( this, X1, Y1 )
            kFeature = this.calcFeatureSubsetSizeOn(X1);
            switch this.scheme
                case 'mid'
                    [this.model.zRank, this.model.zScore] = mrmr_mid_d(X1, Y1, kFeature);
                case 'miq'
                    [this.model.zRank, this.model.zScore] = mrmr_miq_d(X1, Y1, kFeature);
                otherwise
                    error('BatErr:!!!')
            end
        end
    end
    
    methods
%         function [  ] = calc( this )
%         end
    end
    
end

